#include <bits/stdc++.h>
using namespace std;
int a[5001], sum[5001], f[5001][5001];
int main() {
  int n;
  cin >> n; // 读取数列的长度 n

  // 读取数列并计算前缀和
  for (int i = 1; i <= n; i++) {
    cin >> a[i]; // 读取数列中的每个元素
    sum[i] = sum[i - 1] + a[i]; // 计算前缀和
  }

  // 初始化动态规划数组 f
  for (int i = 1; i <= n; i++) {
    f[i][i] = a[i]; // 当区间只有一个元素时，小爱只能选择这个元素
  }

  // 动态规划计算
  for (int L = 2; L <= n; L++) { // L 表示当前考虑的区间长度
    for (int i = 1; i <= n + 1 - L; i++) { // i 表示当前区间的起始位置
      int j = i - 1 + L; // j 表示当前区间的结束位置
      // 计算小爱选择首项或末项后的情况
      int x = a[i] + sum[j] - sum[i] - f[i + 1][j]; // 选择首项 a[i]
      int y = sum[j - 1] - sum[i - 1] - f[i][j - 1] + a[j]; // 选择末项 a[j]
      f[i][j] = max(x, y); // 取两种选择中的最大值
    }
  }

  cout << f[1][n]; // 输出小爱在整个数列中能够获得的最大数字之和
  return 0;
}
